From aae695ab65c45566127746f247bed9eb2765c04f Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Thu, 27 Dec 2001 20:22:16 +0000 Subject: [PATCH] Allow unsetting the title by setting to NULL. Move docs inline. Update the Thu Dec 27 15:13:44 2001 Owen Taylor * gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting the title by setting to NULL. Move docs inline. Update the title if the tearoff window already exists. Code cleanup. (Fixes #65190, reported by Vitaly Tishkov.) --- ChangeLog | 8 +++ ChangeLog.pre-2-0 | 8 +++ ChangeLog.pre-2-10 | 8 +++ ChangeLog.pre-2-2 | 8 +++ ChangeLog.pre-2-4 | 8 +++ ChangeLog.pre-2-6 | 8 +++ ChangeLog.pre-2-8 | 8 +++ docs/reference/gtk/tmpl/gtkmenu.sgml | 6 +-- gtk/gtkmenu.c | 74 +++++++++++++++++++--------- 9 files changed, 109 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5e160d15c1..2d828a0f1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Thu Dec 27 15:13:44 2001 Owen Taylor + + * gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting + the title by setting to NULL. Move docs inline. + Update the title if the tearoff window already + exists. Code cleanup. (Fixes #65190, reported by + Vitaly Tishkov.) + Thu Dec 27 14:04:22 2001 Owen Taylor * gtk/gtksocket.c (gtk_socket_key_press_event): diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 5e160d15c1..2d828a0f1b 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,11 @@ +Thu Dec 27 15:13:44 2001 Owen Taylor + + * gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting + the title by setting to NULL. Move docs inline. + Update the title if the tearoff window already + exists. Code cleanup. (Fixes #65190, reported by + Vitaly Tishkov.) + Thu Dec 27 14:04:22 2001 Owen Taylor * gtk/gtksocket.c (gtk_socket_key_press_event): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 5e160d15c1..2d828a0f1b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +Thu Dec 27 15:13:44 2001 Owen Taylor + + * gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting + the title by setting to NULL. Move docs inline. + Update the title if the tearoff window already + exists. Code cleanup. (Fixes #65190, reported by + Vitaly Tishkov.) + Thu Dec 27 14:04:22 2001 Owen Taylor * gtk/gtksocket.c (gtk_socket_key_press_event): diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 5e160d15c1..2d828a0f1b 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,11 @@ +Thu Dec 27 15:13:44 2001 Owen Taylor + + * gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting + the title by setting to NULL. Move docs inline. + Update the title if the tearoff window already + exists. Code cleanup. (Fixes #65190, reported by + Vitaly Tishkov.) + Thu Dec 27 14:04:22 2001 Owen Taylor * gtk/gtksocket.c (gtk_socket_key_press_event): diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 5e160d15c1..2d828a0f1b 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,11 @@ +Thu Dec 27 15:13:44 2001 Owen Taylor + + * gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting + the title by setting to NULL. Move docs inline. + Update the title if the tearoff window already + exists. Code cleanup. (Fixes #65190, reported by + Vitaly Tishkov.) + Thu Dec 27 14:04:22 2001 Owen Taylor * gtk/gtksocket.c (gtk_socket_key_press_event): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 5e160d15c1..2d828a0f1b 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,11 @@ +Thu Dec 27 15:13:44 2001 Owen Taylor + + * gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting + the title by setting to NULL. Move docs inline. + Update the title if the tearoff window already + exists. Code cleanup. (Fixes #65190, reported by + Vitaly Tishkov.) + Thu Dec 27 14:04:22 2001 Owen Taylor * gtk/gtksocket.c (gtk_socket_key_press_event): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 5e160d15c1..2d828a0f1b 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +Thu Dec 27 15:13:44 2001 Owen Taylor + + * gtk/gtkmenu.c (gtk_menu_set_title): Allow unsetting + the title by setting to NULL. Move docs inline. + Update the title if the tearoff window already + exists. Code cleanup. (Fixes #65190, reported by + Vitaly Tishkov.) + Thu Dec 27 14:04:22 2001 Owen Taylor * gtk/gtksocket.c (gtk_socket_key_press_event): diff --git a/docs/reference/gtk/tmpl/gtkmenu.sgml b/docs/reference/gtk/tmpl/gtkmenu.sgml index 14f94d0489..c8e028f233 100644 --- a/docs/reference/gtk/tmpl/gtkmenu.sgml +++ b/docs/reference/gtk/tmpl/gtkmenu.sgml @@ -192,12 +192,10 @@ See gtk_menu_set_accel_group(). -Sets the title string for the menu. The title is displayed when the menu -is shown as a tearoff menu. -@menu: a #GtkMenu. -@title: a string containing the title for the menu. +@menu: +@title: diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index f2b30b99f6..7041510f9a 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -134,6 +134,8 @@ static void gtk_menu_reparent (GtkMenu *menu, static void gtk_menu_remove (GtkContainer *menu, GtkWidget *widget); +static void gtk_menu_update_title (GtkMenu *menu); + static void _gtk_menu_refresh_accel_paths (GtkMenu *menu, gboolean group_changed); @@ -288,8 +290,7 @@ gtk_menu_get_property (GObject *object, switch (prop_id) { case PROP_TEAROFF_TITLE: - g_value_set_string (value, gtk_object_get_data (GTK_OBJECT (menu), - "gtk-menu-title")); + g_value_set_string (value, gtk_menu_get_title (menu)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -464,6 +465,9 @@ gtk_menu_attach_to_widget (GtkMenu *menu, /* we don't need to set the style here, since * we are a toplevel widget. */ + + /* Fallback title for menu comes from attach widget */ + gtk_menu_update_title (menu); } GtkWidget* @@ -503,6 +507,9 @@ gtk_menu_detach (GtkMenu *menu) g_free (data); + /* Fallback title for menu comes from attach widget */ + gtk_menu_update_title (menu); + gtk_widget_unref (GTK_WIDGET (menu)); } @@ -971,6 +978,30 @@ gtk_menu_set_tearoff_hints (GtkMenu *menu, GDK_HINT_MAX_SIZE|GDK_HINT_MIN_SIZE); } +static void +gtk_menu_update_title (GtkMenu *menu) +{ + if (menu->tearoff_window) + { + const gchar *title; + GtkWidget *attach_widget; + + title = gtk_menu_get_title (menu); + if (!title) + { + attach_widget = gtk_menu_get_attach_widget (menu); + if (GTK_IS_MENU_ITEM (attach_widget)) + { + GtkWidget *child = GTK_BIN (attach_widget)->child; + if (GTK_IS_LABEL (child)) + title = gtk_label_get_text (GTK_LABEL (child)); + } + } + + if (title) + gtk_window_set_title (GTK_WINDOW (menu->tearoff_window), title); + } +} void gtk_menu_set_tearoff_state (GtkMenu *menu, @@ -992,9 +1023,6 @@ gtk_menu_set_tearoff_state (GtkMenu *menu, if (!menu->tearoff_window) { - GtkWidget *attach_widget; - gchar *title; - menu->tearoff_window = g_object_connect (gtk_widget_new (GTK_TYPE_WINDOW, "type", GTK_WINDOW_TOPLEVEL, NULL), @@ -1008,30 +1036,17 @@ gtk_menu_set_tearoff_state (GtkMenu *menu, "event", GTK_SIGNAL_FUNC (gtk_menu_window_event), GTK_OBJECT (menu)); - gtk_widget_realize (menu->tearoff_window); - - title = gtk_object_get_data (GTK_OBJECT (menu), "gtk-menu-title"); - if (!title) - { - attach_widget = gtk_menu_get_attach_widget (menu); - if (GTK_IS_MENU_ITEM (attach_widget)) - { - GtkWidget *child = GTK_BIN (attach_widget)->child; - if (GTK_IS_LABEL (child)) - gtk_label_get (GTK_LABEL (child), &title); - } - } - if (title) - gdk_window_set_title (menu->tearoff_window->window, title); + gtk_menu_update_title (menu); + gtk_widget_realize (menu->tearoff_window); + gdk_window_set_decorations (menu->tearoff_window->window, GDK_DECOR_ALL | GDK_DECOR_RESIZEH | GDK_DECOR_MINIMIZE | GDK_DECOR_MAXIMIZE); - gtk_window_set_policy (GTK_WINDOW (menu->tearoff_window), - FALSE, FALSE, TRUE); + gtk_window_set_resizable (GTK_WINDOW (menu->tearoff_window), FALSE); menu->tearoff_hbox = gtk_hbox_new (FALSE, FALSE); gtk_container_add (GTK_CONTAINER (menu->tearoff_window), menu->tearoff_hbox); @@ -1103,14 +1118,27 @@ gtk_menu_get_tearoff_state (GtkMenu *menu) return menu->torn_off; } +/** + * gtk_menu_set_title: + * @menu: a #GtkMenu + * @title: a string containing the title for the menu. + * + * Sets the title string for the menu. The title is displayed when the menu + * is shown as a tearoff menu. + **/ void gtk_menu_set_title (GtkMenu *menu, const gchar *title) { g_return_if_fail (GTK_IS_MENU (menu)); - gtk_object_set_data_full (GTK_OBJECT (menu), "gtk-menu-title", + if (title) + g_object_set_data_full (G_OBJECT (menu), "gtk-menu-title", g_strdup (title), (GtkDestroyNotify) g_free); + else + g_object_set_data (G_OBJECT (menu), "gtk-menu-title", NULL); + + gtk_menu_update_title (menu); g_object_notify (G_OBJECT (menu), "tearoff_title"); } -- 2.30.2